home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / t_os / qa / aoi_lib2.c < prev    next >
Text File  |  1993-11-30  |  30KB  |  1,098 lines

  1. /*
  2. ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  3. ┃ 葵ライブラリ                         /////  Tab Size : 4  /////  ┃
  4. ┃                                      /////  Margin : 120  /////  ┃
  5. ┃ aoi_lib2.c   v1.0 L20                                            ┃
  6. ┃                                                                  ┃
  7. ┃ (C)K.Konishi 16-Aug-93                                           ┃
  8. ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  9. */
  10.  
  11. #define    LIB
  12.  
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <stdlib.h>
  16. #include <io.h>
  17. #include <time.h>
  18. #include <EGB.h>
  19. #include <MOS.h>
  20. #include "Platform.h"
  21. #include "aoi_lib2.h"
  22.  
  23. // (aoi_lib2.c は HighC 専用になりました)
  24. #if !defined(__GNUC__)
  25.     #include <SND.h>
  26.     #include <conio.h>
  27.     #include <msdos.cf>
  28. #endif
  29.  
  30. // #define    TEST 
  31. // 上の行の//を取るとサンプルプログラムが出来上がります。
  32.  
  33.  
  34. #define    MDCL1     1    /* 色の名前 */
  35. #define    MDCL2     2
  36. #define    MDCL3     3
  37. #define    MDCL4     4
  38. #define    MDCL5     5
  39. #define    MDCL6     9    /* 6から9に変えています */
  40. #define    MDCL7     7
  41.  
  42. #define    BLACK     8
  43. #define    BLUE     9
  44. #define    RED        10
  45. #define    PURPLE    11
  46. #define    GREEN    12
  47. #define    SKYBLUE    13
  48. #define    YELLOW    14
  49. #define    WHITE    15
  50.  
  51. int AOIpset(short x, short y, short c)
  52. {
  53.     EGB_color(work, 0, c);
  54.     WORD(para + 0) = 1;
  55.     WORD(para + 2) = x;
  56.     WORD(para + 4) = y;
  57.     return EGB_pset(work, para);
  58. }
  59.  
  60. int AOIstring(short x, short y, AOIstringData *Data, char *tx)
  61. {
  62.     AOIstringData Dt = *Data;
  63.     EGB_color(work, 0, Dt.sc);
  64.     EGB_fontStyle(work, Dt.ss);
  65.     EGB_textZoom(work, 1, Dt.sx, Dt.sy);
  66.     EGB_textZoom(work, 0, Dt.ax, Dt.ay);
  67.     WORD(para + 0) = x;
  68.     WORD(para + 2) = y;
  69.     WORD(para + 4) = strlen(tx);
  70.     strcpy((para + 6), tx);
  71.     return EGB_sjisString(work, para);
  72. }
  73.  
  74. int AOIstrSetup(short zsx, short zsy, short zax, short zay, short sf, short sc)
  75. {
  76.     return    EGB_textZoom(work, 1, zsx, zsy)
  77.         |    EGB_textZoom(work, 0, zax, zay)
  78.         |    EGB_fontStyle(work, sf)
  79.         |    EGB_color(work, 0, sc);
  80. }
  81.  
  82. int AOIstrSjis(short x, short y, char *tx)
  83. {
  84.     WORD(para + 0) = x;
  85.     WORD(para + 2) = y;
  86.     WORD(para + 4) = strlen(tx);
  87.     strcpy((para + 6), tx);
  88.     return EGB_sjisString(work, para);
  89. }
  90.  
  91. int AOIanyChar(short x, short y, short fx, short fy, char *data)
  92. {
  93.     WORD(para + 0) = x;
  94.     WORD(para + 2) = y;
  95.     WORD(para + 4) = 0;
  96.     EGB_sjisString(work, para);    /* 座標設定用ダミー */
  97.     return EGB_anyChar(work, fx, fy, data);
  98. }
  99.  
  100. int AOIline(short x0, short y0, short x1, short y1, short c)
  101. {
  102.     EGB_color(work, 0, c);
  103.     WORD(para + 0) = 2;
  104.     WORD(para + 2) = x0;
  105.     WORD(para + 4) = y0;
  106.     WORD(para + 6) = x1;
  107.     WORD(para + 8) = y1;
  108.     return EGB_connect(work, para);
  109. }
  110.  
  111. int AOIconnectLeft(short x0, short y0, short x1, short y1, short c)
  112. {
  113.     EGB_color(work, 0, c);
  114.     WORD(para +  0) = 3;
  115.     WORD(para +  2) = x0;
  116.     WORD(para +  4) = y1;
  117.     WORD(para +  6) = x0;
  118.     WORD(para +  8) = y0;
  119.     WORD(para + 10) = x1;
  120.     WORD(para + 12) = y0;
  121.     return EGB_connect(work, para);
  122. }
  123.  
  124. int AOIconnectRight(short x0, short y0, short x1, short y1, short c)
  125. {
  126.     EGB_color(work, 0, c);
  127.     WORD(para +  0) = 3;
  128.     WORD(para +  2) = x0;
  129.     WORD(para +  4) = y1;
  130.     WORD(para +  6) = x1;
  131.     WORD(para +  8) = y1;
  132.     WORD(para + 10) = x1;
  133.     WORD(para + 12) = y0;
  134.     return EGB_connect(work, para);
  135. }
  136.  
  137. int AOIbox(short x0, short y0, short x1, short y1, short c)
  138. {
  139.     EGB_color(work, 0, c);
  140.     WORD(para +  0) = x0;
  141.     WORD(para +  2) = y0;
  142.     WORD(para +  4) = x1;
  143.     WORD(para +  6) = y1;
  144.     return EGB_rectangle(work, para);
  145. }
  146.  
  147. int AOIboxFull(short x0, short y0, short x1, short y1, int c)
  148. {
  149.     int ret = 0;
  150.  
  151.     if (y0 > y1) {
  152.         y1 ^= y0;    y0 ^= y1;    y1 ^= y0;
  153.         x1 ^= x0;    x0 ^= x1;    x1 ^= x0;
  154.     }
  155.     ret = EGB_color(work, 0, c);
  156.     WORD(para + 0) = 2;
  157.     WORD(para + 2) = x0;
  158.     WORD(para + 6) = x1;
  159.     for (; y0 <= y1; y0++) {
  160.         WORD(para + 4) = y0;
  161.         WORD(para + 8) = y0;
  162.         ret += EGB_connect(work, para);
  163.     }
  164.     return ret;
  165. }
  166.  
  167. int AOIwinBase(short x, short y, short lx, short ly, short sd)
  168. {
  169.     int i = 0;
  170.     
  171.     if (sd == 1) {
  172.         EGB_pastel(work, 128);
  173.         i = AOIboxFull(x + lx + 1, y + 6, x + lx + 6, y + ly + 7, MDCL1)
  174.         |    AOIboxFull(x + 6, y + ly + 1, x + lx + 6, y + ly + 7, MDCL1);
  175.     }
  176.     return    i
  177.         |    AOIboxFull(x, y, x + lx, y + ly, MDCL6)
  178.         |    AOIconnectLeft (x    , y    , x + lx - 1, y + ly - 1, WHITE)
  179.         |    AOIconnectRight(x    , y    , x + lx    , y + ly    , MDCL1)
  180.         |    AOIconnectLeft (x + 4, y + 4, x + lx - 5, y + ly - 5, MDCL1)
  181.         |    AOIconnectRight(x + 4, y + 4, x + lx - 4, y + ly - 4, WHITE);
  182. }
  183.  
  184. int AOIbuttonBase(short x, short y, short lx, short ly)
  185. {
  186.     return    AOIboxFull(x + 1, y + 1, x + lx - 1, y + ly - 1, MDCL6)
  187.         |    AOIconnectLeft (x, y, x + lx - 1, y + ly - 1, WHITE)
  188.         |    AOIconnectRight(x, y, x + lx    , y + ly    , MDCL1);
  189. }
  190.  
  191. int AOIsetPalette(int cn, int cg, int cr, int cb)
  192. {
  193.     DWORD(para + 0) = 1;
  194.     DWORD(para + 4) = cn;                 /* cn 色識別番号 */
  195.     BYTE(para +  8) = cb * 17;            /* cb  青 */
  196.     BYTE(para +  9) = cr * 17;            /* cr  赤 */
  197.     BYTE(para + 10) = cg * 17;          /* cg  緑 */
  198.     BYTE(para + 11) = 0;
  199.     return EGB_palette(work, 1, para);    /* display レイヤ表示 */
  200. }
  201.  
  202. int AOIsetPalette256(int cn, int cg, int cr, int cb)
  203. {
  204.     DWORD(para + 0) = 1;
  205.     DWORD(para + 4) = cn;                 /* cn 色識別番号 */
  206.     BYTE(para +  8) = cb * 257;            /* cb  青 */
  207.     BYTE(para +  9) = cr * 257;            /* cr  赤 */
  208.     BYTE(para + 10) = cg * 257;          /* cg  緑 */
  209.     BYTE(para + 11) = 0;
  210.     return EGB_palette(work, 1, para);    /* display レイヤ表示 */
  211. }
  212.  
  213. int AOIcolorIGRB(int g, int r, int b)
  214. {
  215.     return EGB_colorIGRB(work, 0, g * 0x10000 + r * 0x100 + b);
  216. }
  217.  
  218. int AOIsetStandardPalette(void)
  219. {
  220.     return    AOIsetPalette( 8,  0,  0,  0)
  221.         |    AOIsetPalette( 9,  0,  0, 15)
  222.         |    AOIsetPalette(10,  0, 15,  0)
  223.         |    AOIsetPalette(11,  0, 15, 15)
  224.         |    AOIsetPalette(12, 15,  0,  0)
  225.         |    AOIsetPalette(13, 15,  0, 15)
  226.         |    AOIsetPalette(14, 15, 15,  0)
  227.         |    AOIsetPalette(15, 15, 15, 15);
  228. }
  229.  
  230. short AOIbin2short(char *bin)
  231. {
  232.     short    len;
  233.     short    i;
  234.     short    ret = 0;
  235.     
  236.     len = strlen(bin);
  237.     for (i = 0; i < len; i++) {
  238.         ret <<= 1;
  239.         if (bin[i] == '1') ret++;
  240.         else if (bin[i] != '0') return 0;
  241.     }
  242.     
  243.     return ret;    
  244. }
  245.  
  246. long AOIbin2long(char *bin)
  247. {
  248.     short    len;
  249.     short    i;
  250.     long    ret = 0;
  251.     
  252.     len = strlen(bin);
  253.     for (i = 0; i < len; i++) {
  254.         ret <<= 1;
  255.         if (bin[i] == '1') ret++;
  256.         else if (bin[i] != '0') return 0;
  257.     }
  258.     
  259.     return ret;    
  260. }
  261.  
  262. void AOIsetButton(AOIbuttonData *Data, short x, short y, short lx, short ly)
  263. {
  264.     AOIbuttonData bData;
  265.  
  266.     bData.x  = x;
  267.     bData.y  = y;
  268.     bData.lx = lx;
  269.     bData.ly = ly;
  270.     *Data = bData;
  271. }
  272.  
  273. int AOIbutton(short sx, short sy, int mx, int my, AOIbuttonData *Data)
  274. {
  275.     AOIbuttonData *Dt = Data;
  276.     int i;
  277.     
  278.     for (i = 0; i <= BUTTON; i++) {
  279.         if (sx + Dt[i].x < mx && mx < sx + Dt[i].x + Dt[i].lx && sy + Dt[i].y < my && my < sy + Dt[i].y + Dt[i].ly) {
  280.             return i;
  281.         }
  282.     }
  283.     return -1;
  284. }
  285.  
  286. void _AOIfigureDrawSet(short *fig, short *a)
  287. {
  288.     short *da = a;
  289.     
  290.     switch (*fig) {
  291.         case 0 :
  292.             da[1] = da[2] = da[3] = da[4] = da[5] = da[7] = 1;
  293.             break;
  294.         case 1 :
  295.             da[4] = da[5] = 1;
  296.             break;
  297.         case 2 :
  298.             da[1] = da[4] = da[6] = da[3] = da[7] = 1;
  299.             break;
  300.         case 3 :
  301.             da[1] = da[4] = da[6] = da[5] = da[7] = 1;
  302.             break;
  303.         case 4 :
  304.             da[2] = da[6] = da[4] = da[5] = 1;
  305.             break;
  306.         case 5 :
  307.             da[1] = da[2] = da[6] = da[5] = da[7] = 1;
  308.             break;
  309.         case 6 :
  310.             da[1] = da[2] = da[3] = da[6] = da[5] = da[7] = 1;
  311.             break;
  312.         case 7 :
  313.             da[1] = da[2] = da[4] = da[5] = 1;
  314.             break;
  315.         case 8 :
  316.             da[1] = da[2] = da[3] = da[4] = da[5] = da[6] = da[7] = 1;
  317.             break;
  318.         case 9 :
  319.             da[1] = da[2] = da[4] = da[5] = da[6] = da[7] = 1;
  320.             break;
  321.     }
  322. }
  323.  
  324. void AOIfigureDraw(short sx, short sy, short figure)        /* 2桁の数字を12ドットで表示します */
  325. {
  326.     short    a[8];
  327.     short    fig[3];        /* fig[1] : 10の位        fig[2] : 1の位 */
  328.     short    i, j;
  329.     
  330.     for (i = 0; i <= 7; i++) a[i] = 0;
  331.     for (i = 0; i <= 2; i++) fig[i] = 0;
  332.  
  333.     if (figure < 0) figure = 0;    /* 負の数は0にする */
  334.  
  335.     fig[1] = figure / 10;
  336.     fig[2]  = figure - fig[1] * 10;
  337.     for (i = 1; i != 3; i++) {
  338.         _AOIfigureDrawSet(&fig[i], a);
  339.         
  340.         if (i == 2) sx += 10;
  341.         
  342.         AOIline(sx + 1, sy     , sx + 5, sy     , a[1] == 1 ? 15 : 8);
  343.         AOIline(sx    , sy     , sx    , sy +  5, a[2] == 1 ? 15 : 8);
  344.         AOIline(sx    , sy +  7, sx    , sy + 12, a[3] == 1 ? 15 : 8);
  345.         AOIline(sx + 6, sy     , sx + 6, sy +  5, a[4] == 1 ? 15 : 8);
  346.         AOIline(sx + 6, sy +  7, sx + 6, sy + 12, a[5] == 1 ? 15 : 8);
  347.         AOIline(sx + 1, sy +  6, sx + 5, sy +  6, a[6] == 1 ? 15 : 8);
  348.         AOIline(sx + 1, sy + 12, sx + 5, sy + 12, a[7] == 1 ? 15 : 8);
  349.         for (j = 0; j <= 7; j++) a[j] = 0;
  350.     }
  351. }
  352.  
  353. void AOIfigureDraw2(short sx, short sy, int figure)    /* 2桁の数字を25ドットで表示します */
  354. {
  355.     short    a[8];
  356.     short    fig[3];        /* fig[1] : 10の位        fig[2] : 1の位 */
  357.     short    i, j, k;
  358.     short    m = 0, n;
  359.     
  360.     for (i = 0; i <= 7; i++) a[i] = 0;
  361.     for (i = 0; i <= 2; i++) fig[i] = 0;
  362.  
  363.     if (figure < 0) figure = 0;    /* 負の数は0にする */
  364.  
  365.     fig[1] = figure / 10;
  366.     fig[2] = figure - fig[1] * 10;
  367.     for (i = 1; i != 3; i++) {
  368.         _AOIfigureDrawSet(&fig[i], a);
  369.         
  370.         if (i == 2) sx += 20;
  371.         for (k = 0; k < 4; k++) {
  372.             sx += k;
  373.             if (k == 0 || k == 3) m = 1;
  374.             else m = 0;
  375.             for (n = 0; n < 2; n++) {
  376.                 AOIline(sx + n * 11, sy +  3 + m, sx + n * 11, sy + 11 - m,    a[2 + n * 2] == 1 ? 14 : 8);
  377.                 AOIline(sx + n * 11, sy + 14 + m, sx + n * 11, sy + 22 - m,    a[3 + n * 2] == 1 ? 14 : 8);
  378.             }
  379.             sx -= k;
  380.         }
  381.         for (k = 0; k < 4; k++) {
  382.             sy += k;
  383.             if (k == 0 || k == 3) m = 1;
  384.             else m = 0;
  385.             AOIline(sx + 3 + m, sy     , sx + 11 - m, sy     , a[1] == 1 ? 14 : 8);
  386.             AOIline(sx + 3 + m, sy + 11, sx + 11 - m, sy + 11, a[6] == 1 ? 14 : 8);
  387.             AOIline(sx + 3 + m, sy + 22, sx + 11 - m, sy + 22, a[7] == 1 ? 14 : 8);
  388.             sy -= k;
  389.         }
  390.         for (j = 0; j <= 7; j++) a[j] = 0;
  391.     }
  392. }
  393.  
  394. short _AOIrandom(short max)    /* 0~99までの特殊用途乱数発生 */
  395. {    
  396.     short    max10, max1;
  397.     short    ret10, ret1;
  398.     
  399.     max10 = max / 10;
  400.     do {
  401.         ret10 = (rand() % 10);
  402.     } while (max10 < ret10);
  403.     ret1 = (rand() % 10);
  404.     if (max10 == ret10) {
  405.         max1 = max - max10 * 10;
  406.         while (max1 < ret1) {
  407.             ret1 = (rand() % 10);
  408.         }
  409.     }
  410.     return ret10 * 10 + ret1;
  411. }
  412.  
  413. long AOIrandom(long max)    /* 0~999999までの乱数発生 */
  414. {
  415.     time_t *t = 0;
  416.     
  417.     srand((unsigned int)time(t));
  418.     if (max > 9999) {
  419.         return _AOIrandom(max / 10000) * 10000
  420.              + _AOIrandom(99) * 100
  421.              + _AOIrandom(99);
  422.     }
  423.     if (max > 99) {
  424.         return _AOIrandom(max / 100) * 100
  425.              + _AOIrandom(99);
  426.     }
  427.     return _AOIrandom(99);
  428. }
  429.  
  430. int AOIbuttonLamp(short sx, short sy, AOIbuttonData *Data)    /* ボタン部分を反転 */
  431. {
  432.     AOIbuttonData Dt = *Data;
  433.     
  434.     return    EGB_writeMode(work, 4)
  435.         |    MOS_disp(0)
  436.         |    AOIboxFull(sx + Dt.x, sy + Dt.y, sx + Dt.x + Dt.lx, sy + Dt.y + Dt.ly, 15)
  437.         |    MOS_disp(1)
  438.         |    EGB_writeMode(work, 0);
  439. }
  440.  
  441. int AOIslantingBox(short x0, short y0, short x1, short y1, short lx, short cl)
  442. {
  443.     if (x0 == x1) return AOIbox(x0, y0, x0 + lx, y1, cl);
  444.     if (y0 == y1) return AOIline(x0, y0, x1 + lx, y0, cl);
  445.  
  446.     if (y0 > y1) {
  447.         y1 ^= y0;    y0 ^= y1;    y1 ^= y0;
  448.         x1 ^= x0;    x0 ^= x1;    x1 ^= x0;
  449.     }
  450.     
  451.     EGB_color(work, 0, cl);
  452.     WORD(para +  0) = 5;
  453.     WORD(para +  2) = x0;
  454.     WORD(para +  4) = y0;
  455.     WORD(para +  6) = x1;
  456.     WORD(para +  8) = y1;
  457.     WORD(para + 10) = x1 + lx;
  458.     WORD(para + 12) = y1;
  459.     WORD(para + 14) = x0 + lx;
  460.     WORD(para + 16) = y0;
  461.     WORD(para + 18) = x0;
  462.     WORD(para + 20) = y0;
  463.     return EGB_connect(work, para);
  464.     
  465. }
  466.  
  467. int AOIslantingBoxFull(short x0, short y0, short x1, short y1, short lx, short cl)
  468. {
  469.     short dmmy_x0;
  470.     
  471.     if (x0 == x1) return AOIbox(x0, y0, x0 + lx, y1, cl);
  472.     if (y0 == y1) return AOIline(x0, y0, x1 + lx, y0, cl);
  473.  
  474.     if (y0 > y1) {
  475.         y1 ^= y0;    y0 ^= y1;    y1 ^= y0;
  476.         x1 ^= x0;    x0 ^= x1;    x1 ^= x0;
  477.     }
  478.     
  479.     EGB_color(work, 0, cl);
  480.     WORD(para +  0) = 2;
  481.     dmmy_x0 = x0 + lx;
  482.     for (;x0 <= dmmy_x0; x0++, x1++) {
  483.         WORD(para +  2) = x0;
  484.         WORD(para +  4) = y0;
  485.         WORD(para +  6) = x1;
  486.         WORD(para +  8) = y1;
  487.         EGB_connect(work, para);
  488.     }
  489.     return 1;
  490. }
  491.  
  492. #if !defined(__GNUC__)
  493.  
  494. int AOIpadCheck(int *status)    /* パッドの押されたボタン番号を返します。 */
  495. {
  496.     int old = 0;
  497.     
  498.     SND_joy_in_2(0, status);
  499.     old = *status;
  500.     if ((*status |   1) != old) return 0;
  501.     if ((*status |   2) != old) return 1;
  502.     if ((*status |   4) != old) return 2;
  503.     if ((*status |   8) != old) return 3;
  504.     if ((*status |  16) != old) return 4;
  505.     if ((*status |  32) != old) return 5;
  506.     if ((*status |  64) != old) return 6;
  507.     if ((*status | 128) != old) return 7;
  508.     return -1;
  509. }
  510.  
  511. int AOIpadCheck2(int *status, int a[])
  512. {
  513.     int old = 0;
  514.     int i;
  515.     
  516.     for (i = 0; i < 8; i++) a[i] = 0;    /* 配列初期化 */
  517.     SND_joy_in_2(0, status);
  518.     old = *status;
  519.     if ((*status |   1) != old) a[0] = 1;
  520.     if ((*status |   2) != old) a[1] = 1;
  521.     if ((*status |   4) != old) a[2] = 1;
  522.     if ((*status |   8) != old) a[3] = 1;
  523.     if ((*status |  16) != old) a[4] = 1;
  524.     if ((*status |  32) != old) a[5] = 1;
  525.     if ((*status |  64) != old) a[6] = 1;
  526.     if ((*status | 128) != old) a[7] = 1;
  527.     return TRUE;
  528. }
  529.  
  530. #endif
  531.  
  532. void ank2sjis(char string[], char str[])
  533. {
  534.     short    i = 0, j = 0;
  535.     char    sjiscode[257][3] = {
  536.         " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
  537.         " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
  538.         " ", "!", "”", "#", "$", "%", "&", "’", "(", ")", "*", "+", ",", "-", ".", "/",
  539.         "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?",
  540.         "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
  541.         "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "〔", "¥", "〕", "^", "_",
  542.         "’", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
  543.         "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", " ̄", " ",
  544.         " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
  545.         " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
  546.         " ", "。", "「", "」", "、", "・", "ヲ", "ァ", "ィ", "ゥ", "ェ", "ォ", "ャ", "ュ", "ョ", "ッ",
  547.         "ー", "ア", "イ", "ウ", "エ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ", "ソ",
  548.         "タ", "チ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ヘ", "ホ", "マ",
  549.         "ミ", "ム", "メ", "モ", "ヤ", "ユ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ン", "゛", "゜",
  550.         " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
  551.         " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "
  552.         };
  553.         
  554.     while (str[i] != '\0') {
  555.         if ((0x81 <= str[i] && str[i] <= 0x9f) || (0xe0 <= str[i] && str[i] <= 0xef)) {    // 全角のとき
  556.             string[j++] = str[i++];
  557.             string[j++] = str[i++];
  558.         } else {    // 半角のとき
  559.             string[j++] = sjiscode[str[i]][0];
  560.             string[j++] = sjiscode[str[i]][1];
  561.             i++;
  562.         }
  563.     }
  564.     string[j] = '\0';
  565. }
  566.  
  567.  
  568. /* Oh!FMTOWNS 1992/3より抜粋 */
  569. unsigned int sjisToJis(unsigned int sjis)
  570. {
  571.     unsigned int    h, l;
  572.     
  573.     h = (sjis >> 8) & 0xff;
  574.     l = sjis & 0xff;
  575.     
  576.     if ( ((h > 0x9f) && (h < 0xe0)) || (h < 0x81) || (h > 0xef) || (l < 0x40) || (l > 0xfe) || (l == 0x7f) ) {
  577.         return 0x2129;
  578.     }
  579.     if (l > 0x7f) l--;
  580.     h -= (h <= 0x9f) ? 0x70 : 0xb0;
  581.     h <<= 1;
  582.     if (l >= 0x9e) l -= 0x5e + 0x1f;
  583.     else {
  584.         l -= 0x1f;
  585.         h--;
  586.     }
  587.     
  588.     return (h << 8) + l;
  589. }
  590.  
  591. long _AOIgetFontAddress(char st[], short fs)
  592. {                /* 文字列 st の先頭文字のフォントファイル上の番地を返す */
  593.     short    i = 0, k = 0;
  594.     long    j;
  595.     int    jisCode;
  596.     int    address;    /* 表示する文字のフォントファイル上の番地 */
  597.     long    firstAdr;    /* フォントファイル上で全角文字が始まる番地 */
  598.     long    stepAdr;    /* フォントファイル上の次のブロックまでのバイト数 */
  599.     long    fontS;        /* 1文字分のバイト数 */
  600.     jisCode = sjisToJis((st[0] << 8) + st[1]);    
  601.                 /* 文字列 st の先頭文字のJISコードを得る */
  602.     do {            /* 文字列 st を1文字分ずらす */
  603.         st[i]     = st[i + 2];
  604.         st[i + 1] = st[i + 3];
  605.         i += 2;
  606.     } while (st[i] != '\0');
  607.  
  608.     if (fs == 16 && jisCode >= 0x5020) return 3072;
  609.                 /* 12ドットの第2水準は空白置き換え */
  610.     switch (fs) {
  611.         case 64 :    /* 60ドットファイルの各種番地 */
  612.             firstAdr = 61440;
  613.             stepAdr  = 45120;
  614.             fontS = 480;
  615.             break;
  616.         case 48 :    /* 48ドットファイルの各種番地 */
  617.             firstAdr = 36880;
  618.             stepAdr  = 27072;
  619.             fontS = 288;
  620.             break;
  621.         case 32 :    /* 32ドットファイルの各種番地 */
  622.             firstAdr = 16400;
  623.             stepAdr  = 12032;
  624.             fontS = 128;
  625.             break;
  626.         case 24 :     /* 24ドットファイルの各種番地 */
  627.             firstAdr = 0x12;
  628.             stepAdr  = 0x1B2C;
  629.             fontS = 0x47 + 3;
  630.             break;
  631.         case 16 :    /* 12ドットファイルの各種番地 */
  632.             firstAdr = 3072;
  633.             stepAdr  = 2256;
  634.             fontS = 24;
  635.             break;
  636.     }
  637.                 /* フォントファイル上の番地を計算する */
  638.     for (j = 0x2120; j < 0x7427; j += 0x100) {
  639.         if (j <= jisCode && jisCode <= j + 0x5f) {
  640.             address = firstAdr  + fontS * (jisCode - j - 1) + stepAdr * k;
  641.             j = 0xFFFF;
  642.         }
  643.         k++;
  644.     }
  645.     
  646.     return address;
  647. }
  648.  
  649. void AOIstrFJ2(FILE *fp, short fs, short sx, short sy, char st[], short gap)
  650. {                        /* 全角の文字列を fp で示されるフォントで表示する */
  651.     short    lenSt;        /* 残りの文字数 */
  652.     short    fs2;        /* 8で割り切れない大きさのフォント用のダミー */
  653.     char    *data;        /* フォントデータ格納番地 */
  654.  
  655.     fs2 = fs;
  656.     if (fs == 60) {        /* 60ドットは64ドットとして処理 */
  657.         fs2 = fs = 64;
  658.         gap -= 4;
  659.     }
  660.     if (fs == 12) {        /* 12ドットは一部16ドットとして処理 */
  661.         fs = 16;
  662.         gap -= 4;
  663.     }
  664.     lenSt = (short)strlen(st) >> 1;
  665.                             /* lenSt に文字数を代入(全部全角文字と考え2で割っている) */
  666.     fseek(fp, _AOIgetFontAddress(st, fs), SEEK_SET);    /* 得られた番地までシークする */
  667.     data = (char *)malloc(fs2 * fs * sizeof(char));        /* フォントデータ格納領域確保 */
  668.     while (!feof(fp) && lenSt) {                        /* 残りの文字数が0になるまで */
  669.         fread(data, sizeof(char), (fs >> 3) * fs2, fp);    /* フォントデータを1文字分読み込む */
  670.         AOIanyChar(sx, sy, fs2, fs2, data);            /* 1文字描画 */
  671.         sx += (fs + gap);
  672.         lenSt--;        /*残りの文字数を1減らす */
  673.         fseek(fp, _AOIgetFontAddress(st, fs), SEEK_SET);/* 得られた番地までシークする */
  674.     }
  675.     free(data);                                            /* フォントデータ格納領域解放 */
  676. }
  677.  
  678. void AOIstring_FJ2(FILE *fp, short fs, short sx, short sy, char st[], short sc, short gap)
  679. {
  680.     EGB_color(work, 0, sc);
  681.     EGB_textZoom(work, 1, fs, fs);
  682.     AOIstrFJ2(fp, fs, sx, sy, st, gap);
  683. }
  684.  
  685. void AOIstrFJ2Zoom(FILE *fp, short fs, short sx, short sy, char st[], short sc, short gap, short zx, short zy)
  686. {
  687.     EGB_color(work, 0, sc);
  688.     EGB_textZoom(work, 1, zx, zy);
  689.     AOIstrFJ2(fp, fs, sx, sy, st, gap + (zx - fs));
  690. }
  691.  
  692. /*
  693. short _AOIstrFJ2setup_FontSearch(char fj2File[])    // HD と CDROMにあるFJ2フォントを捜索します。(-_-;)
  694. {
  695.     char    fj2Drv[][3] = {"d:", "e:", "f:", "g:", "h:", "i:", "j:", "k:", "l:", "m:", "n:", "o:", "p:", "q:"};
  696.     char    fj2FileName[50];
  697.     short    drvNum, endMark, retFntFileChk;
  698.     
  699.     strcpy(fj2FileName, fj2File);
  700.     fj2File[0] = '\0';
  701.     endMark = 0;
  702.     drvNum = 0;
  703.     do {
  704.         strcpy(fj2File, fj2Drv[drvNum]);
  705.         strcat(fj2File, fj2FileName);
  706.         retFntFileChk = _access(fj2File, 1);
  707. //        printf("%s\n", fj2File);
  708. //        printf("%d\n", retFntFileChk);
  709.         drvNum++;
  710.         if (drvNum == 15) endMark = 1;
  711.     } while (retFntFileChk != 0 && endMark != 1);
  712.     
  713.     if (endMark == 1) {
  714.         return FALSE;
  715.     } else {
  716.         return TRUE;
  717.     }
  718. }
  719.  
  720. enum {MINN, GOTH, MARU, KYOU, MOUH};
  721.  
  722. int _AOIstrFJ2setup_FontNameMake(char fj2File[], short fontSize)
  723. {
  724.     if (_AOIstrFJ2setup_FontSearch(fj2File) == FALSE) {    // fj2フォントの居所が不明のときは、FALSEを返す
  725.         return FALSE;
  726.     }
  727.  
  728. }
  729.  
  730. int AOIstrFJ2setup(FILE *fp, short fontName, short fontSizeX, short fontSizeY, short fontStyle, short color)
  731. {
  732.     char    fj2File[50];
  733.     char    string[256];
  734.     FILE    *fp1;
  735.     
  736.     if (_AOIstrFJ2setup_FontNameMake(fj2File, maxof(fontSizeX, fontSizeY)) == FALSE) {
  737.         // fj2フォントの居所が不明のときは、FALSEを返す
  738.         return FALSE;
  739.     }
  740.  
  741.     EGB_textZoom(work, 1, fontSizeX, fontSizeY)
  742.     EGB_textZoom(work, 0, fontSizeX, fontSizeY)
  743.     EGB_fontStyle(work, fontStyle)
  744.     EGB_color(work, 0, color);
  745.     
  746.  
  747. }
  748.  
  749. void AOIstrFJ2(FILE *fp, short fs, short sx, short sy, char st[], short gap)
  750. {                        // 全角の文字列を fp で示されるフォントで表示する
  751.     short    lenSt;        // 残りの文字数
  752.     short    fs2;        // 8で割り切れない大きさのフォント用のダミー
  753.     char    *data;        // フォントデータ格納番地
  754.  
  755.     fs2 = fs;
  756.     if (fs == 60) {        // 60ドットは64ドットとして処理
  757.         fs2 = fs = 64;
  758.         gap -= 4;
  759.     }
  760.     if (fs == 12) {        // 12ドットは一部16ドットとして処理
  761.         fs = 16;
  762.         gap -= 4;
  763.     }
  764.     lenSt = (short)strlen(st) >> 1;
  765.                             // lenSt に文字数を代入(全部全角文字と考え2で割っている)
  766.     fseek(fp, _AOIgetFontAddress(st, fs), SEEK_SET);    // 得られた番地までシークする
  767.     data = (char *)malloc(fs2 * fs * sizeof(char));        // フォントデータ格納領域確保
  768.     while (!feof(fp) && lenSt) {                        // 残りの文字数が0になるまで
  769.         fread(data, sizeof(char), (fs >> 3) * fs2, fp);    // フォントデータを1文字分読み込む
  770.         AOIanyChar(sx, sy, fs2, fs2, data);            // 1文字描画
  771.         sx += (fs + gap);
  772.         lenSt--;        //残りの文字数を1減らす
  773.         fseek(fp, _AOIgetFontAddress(st, fs), SEEK_SET);// 得られた番地までシークする
  774.     }
  775.     free(data);                                            // フォントデータ格納領域解放
  776. }
  777. */
  778.  
  779.  
  780. short _AOIsystem12FontSetup(char fnt12File[])
  781. // ハードディスクにある12ドットフォントを捜索します。(-_-;)
  782. {
  783.     char    fnt12Drv[][3] = {"d:", "e:", "f:", "g:", "h:", "i:", "j:", "k:", "l:", "m:", "n:", "o:", "p:"};
  784.     char    fnt12FileName[] = "\\sysinit\\system.fnt";
  785.     short    drvNum, endMark, retFntFileChk;
  786.     
  787.     endMark = 0;
  788.     drvNum = 0;
  789.     do {
  790.         strcpy(fnt12File, fnt12Drv[drvNum]);
  791.         strcat(fnt12File, fnt12FileName);
  792.         retFntFileChk = _access(fnt12File, 1);
  793. //        printf("%s\n", fnt12File);
  794. //        printf("%d\n", retFntFileChk);
  795.         drvNum++;
  796.         if (drvNum == 14) endMark = 1;
  797.     } while (retFntFileChk != 0 && endMark != 1);
  798.     
  799.     if (endMark == 1) {
  800.         return FALSE;
  801.     } else {
  802.         return TRUE;
  803.     }
  804. }
  805.  
  806. void AOIsystem16Font(short x, short y, short c, char *str)
  807. {
  808.     AOIstringData    AstringD;
  809.  
  810.     AstringD.sx = 12;
  811.     AstringD.sy = 12;
  812.     AstringD.ax =  6;
  813.     AstringD.ay = 12;
  814.     AstringD.sc = c;
  815.     AstringD.ss = 0x0;
  816.     AOIstring(x, y, &AstringD, str);
  817. }
  818.  
  819. void AOIsystem12Font(short x, short y, short c, char *str)
  820. {
  821.     char    fnt12File[50];
  822.     char    string[256];
  823.     FILE    *fp1;
  824.     
  825.     if (_AOIsystem12FontSetup(fnt12File) == FALSE) {    // 12ドットフォントの居所が不明のときは、16ドットで代用
  826.         AOIsystem16Font(x, y + 12, c, str);
  827.         return;
  828.     }
  829. //    printf("%s", fnt12File);
  830.     if ((fp1 = fopen(fnt12File, "rb")) == NULL) {
  831.         perror("system.fnt のオープンを失敗しました");
  832.     } else {
  833.         ank2sjis(string, str);
  834.         AOIstring_FJ2(fp1, 12, x, y + 12, string, c, 0);
  835.     }
  836.     
  837.     fclose(fp1);
  838.     return;
  839. }
  840.  
  841. int AOIgetGraph(char *buf, short x0, short y0, short x1, short y1)    /* 画像データ画面の読み込み */
  842. {
  843.     DWORD(para +  0) = (unsigned int)buf;
  844.     WORD (para +  4) = 0x14 /* getds() */;
  845.     WORD (para +  6) = x0;
  846.     WORD (para +  8) = y0;
  847.     WORD (para + 10) = x1;
  848.     WORD (para + 12) = y1;
  849.     return EGB_getBlock(work, para);            /* ドットデータの読み込み1 */
  850.  
  851. }
  852.  
  853. int AOIgetGraphZoom(char *buf, short x0, short y0, short x1, short y1, short xs, short ys)    /* 画像データ画面の読み込み */
  854. {
  855.     DWORD(para +  0) = (unsigned int)buf;
  856.     WORD (para +  4) = 0x14 /* getds() */;
  857.     WORD (para +  6) = x0;
  858.     WORD (para +  8) = y0;
  859.     WORD (para + 10) = x1;
  860.     WORD (para + 12) = y1;
  861.     WORD (para + 14) = xs;
  862.     WORD (para + 16) = ys;
  863.     return EGB_getBlock(work, para);            /* ドットデータの読み込み2 */
  864.  
  865. }
  866.  
  867. int AOIputGraph(char *buf, short x0, short y0, short x1, short y1)    /* 画像データ画面の書き込み */
  868. {
  869.     DWORD(para +  0) = (unsigned int)buf;
  870.     WORD (para +  4) = 0x14 /* getds() */;
  871.     WORD (para +  6) = x0;
  872.     WORD (para +  8) = y0;
  873.     WORD (para + 10) = x1;
  874.     WORD (para + 12) = y1;
  875.     return EGB_putBlock(work, 0, para);        /* ドットデータの書き込み1 */
  876. }
  877.  
  878. int AOIputGraphZoom(char *buf, short x0, short y0, short x1, short y1, short xs, short ys)
  879.     /* 画像データ画面の書き込み */
  880. {
  881.     DWORD(para +  0) = (unsigned int)buf;
  882.     WORD (para +  4) = 0x14 /* getds() */;
  883.     WORD (para +  6) = x0;
  884.     WORD (para +  8) = y0;
  885.     WORD (para + 10) = x1;
  886.     WORD (para + 12) = y1;
  887.     WORD (para + 14) = xs;
  888.     WORD (para + 16) = ys;
  889.     return EGB_putBlockZoom(work, 0, para);        /* ドットデータの書き込み2 */
  890. }
  891.  
  892. void AOIwindowMove(char *dispTmp, short *sx, short *sy, short lx, short ly)    /* ウインドゥ移動 */
  893. {
  894.     int    ch, mx, my;
  895.     int dx, dy;
  896.     char dispTmp2[(640 / 8) * 480];                /* ドットデータの読み書き作業領域 */
  897.  
  898.     MOS_disp(0);
  899.     AOIgetGraph(dispTmp2, *sx, *sy, *sx + lx + 7, *sy + ly + 7);
  900.     AOIputGraph(dispTmp, *sx, *sy, *sx + lx + 7, *sy + ly + 7);
  901.     MOS_typeRom(83 + 1, 8, 8, pat_work);    /* マウスを手の平に */
  902.     MOS_disp(1);
  903.     EGB_writeMode(work, 4);
  904.     EGB_linePattern(work, 1, 0x55555555);
  905.  
  906.     MOS_rdpos(&ch, &mx, &my);
  907.     dx = mx - *sx;
  908.     dy = my - *sy;
  909.  
  910.     do {
  911.         MOS_rdpos(&ch, &mx, &my);
  912.         *sx = mx - dx;
  913.         *sy = my - dy;
  914.         MOS_disp(0);
  915.         AOIbox(*sx, *sy, *sx + lx, *sy + ly, WHITE);
  916.         AOIbox(*sx, *sy, *sx + lx, *sy + ly, WHITE);
  917.         MOS_disp(1);
  918.     } while (ch == 1);
  919.     
  920.     EGB_linePattern(work, 1, 0xffffffff);
  921.     EGB_writeMode(work, 0);
  922.     MOS_disp(0);
  923.     MOS_typeRom(80 + 1, 0, 0, pat_work);    /* マウスを元通り */
  924.     AOIgetGraph(dispTmp, *sx, *sy, *sx + lx + 7, *sy + ly + 7);
  925.     AOIputGraph(dispTmp2, *sx, *sy, *sx + lx + 7, *sy + ly + 7);
  926.     MOS_disp(1);
  927. }
  928.  
  929. int AOItiff(int sx, int sy, char filename[100])    /* 廃止    拡張ライブラリIの方を使用せよ */
  930. {
  931.     FILE    *fp;
  932.     char    *data;
  933.     short    x[1], y[1], bit[1];
  934.     long    allBit;
  935.     
  936.     if ((fp = fopen(filename, "rb")) == NULL) {        /* ファイルオープン */
  937.         perror("ファイルのオープンを失敗しました");
  938.         return FALSE;
  939.     }
  940.     fseek(fp, 0x001e, SEEK_SET);    fread(x, sizeof(short), 1, fp);            /* ドット数読み込み */
  941.     fseek(fp, 0x002a, SEEK_SET);    fread(y, sizeof(short), 1, fp);
  942.     fseek(fp, 0x0036, SEEK_SET);    fread(bit, sizeof(short), 1, fp);        /* ビット数読み込み */
  943. /* printf("%d %d %d", x[0], y[0], bit[0]); */
  944.     switch (bit[0]) {
  945.         case 4 :
  946.             allBit = x[0] * y[0] / 2;    break;
  947.         case 8 :
  948.             allBit = x[0] * y[0];        break;
  949.         case 16 :
  950.             allBit = x[0] * y[0] * 2;    break;
  951.     }
  952.     data = (char *)malloc(allBit * sizeof(char));    /* データ格納領域確保 */
  953.     fseek(fp, 0x0200, SEEK_SET);    fread(data, sizeof(char), allBit, fp);    /* 画像読み込み */
  954.     free(data);                                        /* 動的に確保した領域の開放 */
  955.     fclose(fp);
  956.     DWORD(para +  0) = (unsigned int)data;
  957.     WORD (para +  4) = 0x14;
  958.     WORD (para +  6) = sx;
  959.     WORD (para +  8) = sy;
  960.     WORD (para + 10) = sx + x[0] - 1;
  961.     WORD (para + 12) = sx + y[0] - 1;
  962.     return EGB_putBlock(work, 0, para);    /* 画像描画 */
  963. }
  964.  
  965. void AOIwide17(void)        /* WIDE display set */
  966. /* 戸田 氏 の ゴットトランスファー の ソースリスト を参照 */
  967. {
  968.     int    i;
  969.     int    para[10][2] = {
  970.                 {  0,  80 },    /* HSW1 */
  971.                 {  1, 590 },    /* HSW2 */
  972.                 {  4, 669 },    /* HST  */
  973.                 { 29,   3 },    /* CKI  */
  974.                 {  9, 130 },    /* HDS0 */
  975.                 { 11, 130 },    /*    1 */
  976.                 { 18, 130 },    /* HAJ0 */
  977.                 { 22, 130 },    /*    1 */
  978.                 { 10, 642 },    /* HDE0 */
  979.                 { 12, 642 }        /*    1 */
  980.     };
  981.  
  982.     for(i = 0; i < 10; i++) {
  983.         _outw(0x440, para[i][0]);
  984.         _outw(0x442, para[i][1]);
  985.     }
  986. }
  987.  
  988. void AOIwide3(void)        /* WIDE display set */
  989. {
  990.     int i;
  991.     int para[14][2] = {
  992.                 {  0, 110 },    /* HSW1 */
  993.                 {  1, 802 },    /* HSW2 */
  994.                 {  4, 909 },    /* HST  */
  995.                 { 29,   0 },    /* CKI  */
  996.                 { 18, 130 },    /* HAJ0 */
  997.                 { 22, 130 },    /*    1 */
  998.  
  999.                 {  9, 138 },    /* HDS0  */
  1000.                 { 11, 138 },    /*    1 */
  1001.                 { 10, 898 },    /* HDE0     */
  1002.                 { 12, 898 },    /*    1 */
  1003.  
  1004.                 { 13, 53 },    /* VDS0  */
  1005.                 { 15, 53 },    /*    1 */
  1006.                 { 14, 1200/*106*/ },    /* VDE0     */
  1007.                 { 16, 1200/*106*/ }        /*    1 */
  1008.             };
  1009.  
  1010.     for(i = 0; i < 14; i++) {
  1011.         outpw(0x440, para[i][0]);
  1012.         outpw(0x442, para[i][1]);
  1013.     }
  1014. }
  1015.  
  1016. short AOItownsName(void)    /* TOWNSの機種判別 */
  1017. {
  1018.     short m;
  1019.     
  1020.     switch (m = _inp(0x31)) {
  1021.         case 1..5 :
  1022.             break;
  1023.         default :
  1024.             m = 0;    break;
  1025.     }
  1026.     return m;    /* 1 : 初代   2 : 2代目   3 : 3代目   4 : IIUX   5 : IICX */
  1027. }
  1028.  
  1029.  
  1030. // サンプルプログラムは 13行目の // を取ってください
  1031.  
  1032. #ifdef    TEST
  1033.  
  1034. void main(void)
  1035. {
  1036.     AOIstringData    AstringD;    /* AOIstringData型の変数宣言 */
  1037.     int        i;
  1038.     FILE    *fp;
  1039.  
  1040.     EGB_init(work, EgbWorkSize);
  1041.     EGB_resolution(work, 0, 3);
  1042.     EGB_resolution(work, 1, 3);
  1043.     EGB_writePage(work, 0);
  1044.     
  1045.     AOIsetPalette( 1,  0,  9, 15);
  1046.     AOIsetPalette( 2,  0,  8,  0);
  1047.     AOIsetPalette( 3,  0,  8,  8);
  1048.     AOIsetPalette( 4,  8,  0,  0);
  1049.     AOIsetPalette( 5,  8,  0,  8);
  1050.     AOIsetPalette( 6, 12, 12, 12);
  1051.     AOIsetPalette( 7,  7,  7,  7);
  1052.     AOIsetPalette( 8,  2,  2,  2);
  1053.     AOIsetPalette( 9, 11, 12, 15);
  1054.     AOIsetPalette(10,  0, 15,  0);
  1055.     AOIsetPalette(11,  8, 15, 15);
  1056.     AOIsetPalette(12, 15,  0,  8);
  1057.     AOIsetPalette(13, 15,  0, 15);
  1058.     AOIsetPalette(14, 15, 15,  0);
  1059.     AOIsetPalette(15, 15, 15, 15);
  1060.  
  1061.     for (i = 0; i <= 450; i+= 30) AOIboxFull(0, i, 639, i + 30, i / 30);    
  1062.  
  1063.     AstringD.sx = 16;                    /* AOIstring使用例 */
  1064.     AstringD.sy = 16;
  1065.     AstringD.ax =  8;
  1066.     AstringD.ay = 16;
  1067.     AstringD.sc = 15;
  1068.     AstringD.ss = 0x02;
  1069.     AOIstring(100, 100, &AstringD, "あいうえおjkjkjk");
  1070.  
  1071.     AOIline(0, 0, 639, 399, 6);                    /* AOIline使用例 */
  1072.  
  1073.     AOIbox(100, 100, 200, 399, 7);                /* AOIbox使用例 */
  1074.  
  1075.     AOIboxFull(201, 100, 599, 200, 1);            /* AOIboxFull使用例 */
  1076.  
  1077.     if ((fp = fopen("Q:\\fj2\\font\\minn60.fnt", "rb")) == NULL) {
  1078.         perror("minn60.fnt のオープンを失敗しました");
  1079.     }
  1080.     AOIstring_FJ2(fp, 60, 300, 100, "文字列ABC", 14, 0);
  1081.     fclose(fp);
  1082.  
  1083.     AOIwinBase(250, 150, 350, 200, 1);            /* AOIwinBase使用例 */
  1084.  
  1085.     AOIbuttonBase(255, 155, 340, 16);        /* AOIbuttonBase使用例 */
  1086.  
  1087.     AstringD.sx = 12;                    /* AOIstring使用例 */
  1088.     AstringD.sy = 12;
  1089.     AstringD.ax =  6;
  1090.     AstringD.ay = 12;
  1091.     AstringD.sc = BLACK;
  1092.     AstringD.ss = 0x01;
  1093.     AOIstring(300, 168, &AstringD, "ウインドゥの試作版です");
  1094.  
  1095. }
  1096.  
  1097.  
  1098. #endif